package com.hancheng.commoncloud.framework.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class MobileFormatUtil {

    /**
     * 大陆号码或香港号码均可  返回true为是手机号  false不是手机号
     */
    public static boolean isMobileLegal(String str)throws PatternSyntaxException {
        return isChinaMobileLegal(str) || isHKMobileLegal(str);
    }

    /**
     * 判断是否为手机号方法
     */
    public static boolean isMobile(String value) {
        final String regex = "(?:0|86|\\+86)?1[3456789]\\d{9}";
        Pattern pattern = Pattern.compile(regex);
        return pattern.matcher(value).matches();
    }

    /**
     *     中国电信号段
     *         133,149,153,173,174,177,180,181,189,199
     *     中国联通号段
     *         130,131,132,145,146,155,156,166,175,176,185,186
     *     中国移动号段
     *         134(0-8),135,136,137,138,139,147,148,150,151,152,157,158,159,165,178,182,183,184,187,188,198
     *     上网卡专属号段（用于上网和收发短信，不能打电话）
     *         如中国联通的是145
     *     虚拟运营商
     *         电信：1700,1701,1702
     *         移动：1703,1705,1706
     *         联通：1704,1707,1708,1709,171
     *     卫星通信： 1349 <br>　　　　　未知号段：141、142、143、144、154
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static boolean isChinaMobileLegal(String str) throws PatternSyntaxException {
//        String regExp = "^((13[0-9])|(15[^4])|(18[0,1,2,3,4,5-9])|(17[0-8])|(19[0-9])|(147))\\d{8}$";
        String regExp="^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$";// 验证手机号
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 香港手机号码8位数，5|6|8|9开头+7位任意数
     */
    public static boolean isHKMobileLegal(String str)throws PatternSyntaxException {
        String regExp = "^(5|6|8|9)\\d{7}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }
}
